package com.base.cn.platform.os.service.manage.sysUser;

import com.base.cn.platform.os.service.FeignAuthConfig;
import com.base.cn.platform.os.service.manage.BaseService;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.math.BigDecimal;
import java.util.Map;

/**
 * 管理员用户业务接口
 *
 * @author s.li
 * @create 2018-02-07 17:24
 */
@FeignClient(name = BaseService.appName,configuration = FeignAuthConfig.class)
public interface SysUserService extends BaseService {

    /**
     * 查询用户数量
     * @return 用户数量
     */
    @RequestMapping(contextPath + "/sysUserCount")
    BigDecimal count();

    /**
     * 查询管理员用户列表
     * @param currentPage 分页条件
     * @param sysUser 查询条件
     * @param roleData 是否查询角色数据
     * @param groupData 是否查询部门数据
     * @param createUser 是否查询创建人的数据
     * @return  PageInfo<SysUser>
     */
    @RequestMapping(contextPath + "/querySysUserList")
    Map<String,Object> querySysUserList(@RequestParam(value = "currentPage", required = false, defaultValue = "1") int currentPage,
                                        @RequestBody Map<String, Object> sysUser,
                                        @RequestParam("roleData") boolean roleData, @RequestParam("groupData") boolean groupData, @RequestParam("createUser") boolean createUser);

    /**
     * 创建一个用户
     * @param sysUser 用户数据
     * @return 返回创建成功的用户对象
     */
    @RequestMapping(contextPath+"/createSysUser")
    Map<String,Object> createSysUser(@RequestBody Map<String, Object> sysUser);


    /**
     * 通过用户名，查询用户信息对象
     * @param username 用户名
     * @return 用户对象
     */
    @RequestMapping(contextPath+"/findSysUserByUsername")
    Map<String,Object> findSysUserByUsername(@RequestParam(value = "username", required = false) String username);

    /**
     * 通过用户ID，查询用户对象
     * @param userId 用户ID
     * @param roleData 是否设置用户的角色数据
     * @param groupData  是否设置用户的部门数据
     * @param createUser 是否设置用户的创建人数据
     * @return SysUser
     */
    @RequestMapping(contextPath + "/findSysUserById")
    Map<String,Object> findSysUserById(@RequestParam("userId") BigDecimal userId,
                                       @RequestParam("roleData") boolean roleData,
                                       @RequestParam("groupData") boolean groupData,
                                       @RequestParam("createUser") boolean createUser);

    /**
     * 通过用户ID串，获取用户Map
     * @param userIds 用户ID串
     * @param roleData 是否设置用户的角色数据
     * @param groupData  是否设置用户的部门数据
     * @param createUser 是否设置用户的创建人数据
     * @return Map<BigDecimal,SysUser>
     */
    @RequestMapping(contextPath + "/findSysUserMapByUserIds")
    Map<BigDecimal,Map<String,Object>> findSysUserMapByUserIds(@RequestParam("userId") String userIds,
                                                               @RequestParam("roleData") boolean roleData,
                                                               @RequestParam("groupData") boolean groupData,
                                                               @RequestParam("createUser") boolean createUser);
    /**
     * 修改用户状态
     * @param userIds 用户ID串
     * @param status 状态，1正常，2禁用
     */
    @RequestMapping(contextPath + "/updateSysUserStatus")
    Map<String,Object> updateSysUserStatus(@RequestParam("userIds") String userIds, @RequestParam("status") int status);

    /**
     * 删除用户
     * @param userIds 用户ID串
     * @return Map<String,Object>
     */
    @RequestMapping(contextPath + "/deleteSysUser")
    Map<String,Object> deleteSysUser(@RequestParam("userIds") String userIds);

    /**
     * 延期体验用户过期时间
     * @param userIds 用户ID串
     * @return Map<String,Object>
     */
    @RequestMapping(contextPath + "/delayedUser")
    Map<String,Object> delayedUser(@RequestParam("userIds") String userIds);

    /**
     * 修改密码
     * @param userId 用户ID
     * @param newPassword 新的密码
     * @return Map<String,Object>
     */
    @RequestMapping(contextPath + "/updateUserPwd")
    Map<String,Object> updateUserPwd(@RequestParam("userId") BigDecimal userId, @RequestParam("newPassword") String newPassword);

    /**
     * 根据账号姓名查询id串
     * @param userName
     * @return
     */
    @RequestMapping(contextPath + "/getUserNameIds")
    String getUserNameIds(@RequestParam("userName") String userName);

    /**
     * 修改用户引导状态
     * @param userId 用户id
     * @param guideStatus 引导状态 1-未引导，2-已引导
     */
    @RequestMapping(contextPath + "/updateSysUserGuideStatus")
    void updateSysUserGuideStatus(@RequestParam("userId") BigDecimal userId,
                                  @RequestParam("guideStatus") Integer guideStatus);

}
